﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.XPath;
using IbsysII.Domain;
using System.Xml;
using System.Windows;

namespace IbsysII.Util
{

    //Klasse Xpath_Zugriff zur Datenintegration in die Anwendung
    //Quelle ist die XML Datei aus Scsim
    //Bewegungsdaten der vergangenen Periode sind in dieser Datei enthalten
    //[Zum Start des Programms werden im ersten Schritt die benoetigten Objekte erstellt und mit den Stammdaten angereichert]
    //Im Zweiten Schritt werden die Objekte (mit den Stammdaten) mit Bewegungsdaten angereichert, diese entstammen der scsim XML Datei
    public class Xpath_Zugriff
    {
        static XPathDocument xmlInput;

        static XPathNavigator naviPeriod;
        static XPathNavigator naviProduktID;
        static XPathNavigator naviProduktMenge;
        static XPathNavigator naviProduktPreis;

        static XPathNavigator naviArbeitsplID;
        static XPathNavigator naviArbeitsplRuestAnzahl;
        static XPathNavigator naviArbeitsplLeerzeit;
        static XPathNavigator naviArbeitsplLohneLeer;
        static XPathNavigator naviArbeitsplLohn;
        static XPathNavigator naviArbeitsplIMaschinenleer;

        static XPathNavigator naviProdauftragwartelisteID;
        static XPathNavigator naviProdauftragwartelisteZeitbedarf;
        static XPathNavigator naviProdauftragwarteListeProdauftrag;
        static XPathNavigator naviProdauftragwartelisteLos;
        static XPathNavigator naviProdauftragwartelisteTeil;
        static XPathNavigator naviProdauftragwartelistemenge;
        static XPathNavigator naviProdauftragwartelisteArbeitsplatz;

        static XPathNavigator naviProdauftragBearbeitungArbeitsplatz;
        static XPathNavigator naviProdauftragBearbeitungProdauftrag;
        static XPathNavigator naviProdauftragBearbeitungTeil;
        static XPathNavigator naviProdauftragBearbeitungMenge;
        static XPathNavigator naviProdauftragBearbeitungZeitbedarf;

        static XPathNavigator naviLagerzugangAktuellBestellPeriode;
        static XPathNavigator naviLagerzugangAktuellBestellNr;
        static XPathNavigator naviLagerzugangAktuellBestellBestellModus;
        static XPathNavigator naviLagerzugangAktuellBestellArtikelNr;
        static XPathNavigator naviLagerzugangAktuellBestellMenge;
        static XPathNavigator naviLagerzugangAktuellBestellLieferzeitpunkt;
        static XPathNavigator naviLagerzugangAktuellBestellMaterialkosten;
        static XPathNavigator naviLagerzugangAktuellBestellGesamtkosten;
        static XPathNavigator naviLagerzugangAktuellBestellBestellkosten;
        static XPathNavigator naviLagerzugangAktuellBestellStueckkosten;

        static XPathNavigator naviLagerzugangZukunftPeriode;
        static XPathNavigator naviLagerzugangZukunftBestellNr;
        static XPathNavigator naviLagerzugangZukunftBestellmodus;
        static XPathNavigator naviLagerzugangZukunftTeilNr;
        static XPathNavigator naviLagerzugangZukunftMenge;

        static XPathNavigator naviProduktivitaet;
        static XPathNavigator naviLiefertreue;
        static XPathNavigator naviAbsatzAktuell;
        static XPathNavigator naviAbsatzAlle;
        static XPathNavigator naviUmsatzrend;

        static string xPathPeriod = "/results/@period";
        static string xPathSelectProdID = "//warehousestock/article/@id";
        static string xPathSelectProdMenge = "//warehousestock/article/@amount";
        static string xPathSelectProdPreis = "//warehousestock/article/@price";

        static string xPathSelectArbeitsplID = "//idletimecosts/workplace/@id";
        static string xPathSelectArbeitsplRuestAnzahl = "//idletimecosts/workplace/@setupevents";
        static string xPathSelectArbeitsplLeerzeit = "//idletimecosts/workplace/@idletime";
        static string xPathSelectArbeitsplLohneLeer = "//idletimecosts/workplace/@wageidletimecosts";
        static string xPathSelectArbeitsplLohn = "//idletimecosts/workplace/@wageidletimecosts";
        static string xPathSelectArbeitsplMaschinenleer = "//idletimecosts/workplace/@machineidletimecosts";

        static string xPathSelectProdauftragBearbeitungArbeitsplatz = "//ordersinwork/workplace/@id";
        static string xPathSelectProdauftragBearbeitungProdauftrag= "//ordersinwork/workplace/@order";
        static string xPathSelectProdauftragBearbeitungTeil = "//ordersinwork/workplace/@item";
        static string xPathSelectProdauftragBearbeitungMenge= "//ordersinwork/workplace/@amount";
        static string xPathSelectProdauftragBearbeitungZeitbedarf = "//ordersinwork/workplace/@timeneed";

        static string xPathSelectLagerzugangAktuellBestellPeriode = "//inwardstockmovement/order/@orderperiod";
        static string xPathSelectLagerzugangAktuellBestellNr = "//inwardstockmovement/order/@id";
        static string xPathSelectLagerzugangAktuellBestellModus = "//inwardstockmovement/order/@mode";
        static string xPathSelectLagerzugangAktuellBestellArtikelNr= "//inwardstockmovement/order/@article";
        static string xPathSelectLagerzugangAktuellBestellMenge = "//inwardstockmovement/order/@amount";
        static string xPathSelectLagerzugangAktuellBestellLieferzeitpunkt = "//inwardstockmovement/order/@time";
        static string xPathSelectLagerzugangAktuellBestellMaterialkosten = "//inwardstockmovement/order/@materialcosts";
        static string xPathSelectLagerzugangAktuellBestellBestellkosten = "//inwardstockmovement/order/@ordercosts";
        static string xPathSelectLagerzugangAktuellBestellGesamtkosten = "//inwardstockmovement/order/@entirecosts";
        static string xPathSelectLagerzugangAktuellBestellStueckkosten = "//inwardstockmovement/order/@piececosts";

        static string xPathSelectLagerzugangZukunftPeriode = "//futureinwardstockmovement/order/@orderperiod";
        static string xPathSelectLagerzugangZukunftBestellNr = "//futureinwardstockmovement/order/@id";
        static string xPathSelectLagerzugangZukunftBestellmodus = "//futureinwardstockmovement/order/@mode";
        static string xPathSelectLagerzugangZukunftTeilNr = "//futureinwardstockmovement/order/@article";
        static string xPathSelectLagerzugangZukunftMenge = "//futureinwardstockmovement/order/@amount";

        static string xPathSelectProduktivitaet = "//result/general/effiency/@current";
        static string xPathSelectLiefertreue = "//result/general/deliveryreliability/@current";
        static string xPathSelectAbsatzAktuell = "//result/general/salesquantity/@current";
        static string xPathSelectAbsatzAlle = "//result/general/salesquantity/@all";
        static string xPathSelectUmsatzrend = "//result/normalsale/profit/@current";

        /// <summary>
        /// die neue eingelesene XMLDatei wird ausgewertet
        /// </summary>
        public static void initNeueDatei()
        {
            
            string projectPath = Environment.CurrentDirectory;
            //Für Setup auskoomentieren
            for (int i = 0; i < 2; i++)
            {
                projectPath = System.IO.Path.GetDirectoryName(projectPath);
            }
            projectPath = projectPath + @"\Daten\P4result.xml";
            xmlInput = new XPathDocument(projectPath);
            naviPeriod = xmlInput.CreateNavigator();

            
            naviProduktID = xmlInput.CreateNavigator();
            naviProduktMenge = xmlInput.CreateNavigator();
            naviProduktPreis = xmlInput.CreateNavigator();

            naviArbeitsplID = xmlInput.CreateNavigator();
            naviArbeitsplRuestAnzahl = xmlInput.CreateNavigator();
            naviArbeitsplLeerzeit = xmlInput.CreateNavigator();
            naviArbeitsplLohneLeer = xmlInput.CreateNavigator();
            naviArbeitsplLohn = xmlInput.CreateNavigator();
            naviArbeitsplIMaschinenleer = xmlInput.CreateNavigator();

            naviProdauftragwartelisteID= xmlInput.CreateNavigator();
            naviProdauftragwartelisteZeitbedarf = xmlInput.CreateNavigator();
            naviProdauftragwarteListeProdauftrag = xmlInput.CreateNavigator();
            naviProdauftragwartelisteLos = xmlInput.CreateNavigator();
            naviProdauftragwartelisteTeil = xmlInput.CreateNavigator();
            naviProdauftragwartelistemenge = xmlInput.CreateNavigator();
            naviProdauftragwartelisteArbeitsplatz = xmlInput.CreateNavigator();

            naviProdauftragBearbeitungArbeitsplatz= xmlInput.CreateNavigator();
            naviProdauftragBearbeitungProdauftrag = xmlInput.CreateNavigator();
            naviProdauftragBearbeitungTeil = xmlInput.CreateNavigator();
            naviProdauftragBearbeitungMenge = xmlInput.CreateNavigator();
            naviProdauftragBearbeitungZeitbedarf = xmlInput.CreateNavigator();

            naviLagerzugangAktuellBestellPeriode= xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellNr  = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellBestellModus = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellArtikelNr = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellMenge = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellLieferzeitpunkt = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellMaterialkosten = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellGesamtkosten = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellBestellkosten = xmlInput.CreateNavigator();
            naviLagerzugangAktuellBestellStueckkosten = xmlInput.CreateNavigator();

            naviLagerzugangZukunftPeriode = xmlInput.CreateNavigator();
            naviLagerzugangZukunftBestellNr= xmlInput.CreateNavigator();
            naviLagerzugangZukunftBestellmodus= xmlInput.CreateNavigator();
            naviLagerzugangZukunftTeilNr = xmlInput.CreateNavigator();
            naviLagerzugangZukunftMenge= xmlInput.CreateNavigator();

            naviProduktivitaet = xmlInput.CreateNavigator();
            naviLiefertreue = xmlInput.CreateNavigator();
            naviAbsatzAktuell= xmlInput.CreateNavigator();
            naviAbsatzAlle = xmlInput.CreateNavigator();
            naviUmsatzrend = xmlInput.CreateNavigator();
        }


        public static List<Teil> getLstTeileLagerbestandFromXml(List<Teil> plstTeile)
        {
            initNeueDatei();
            List<Teil> lstTeile = plstTeile;

            for (int i = 0; i < lstTeile.Count; i++) {
                XPathNodeIterator itID = naviProduktID.Select(xPathSelectProdID);
                XPathNodeIterator itMenge = naviProduktMenge.Select(xPathSelectProdMenge);
                XPathNodeIterator itPreis = naviProduktPreis.Select(xPathSelectProdPreis);

                for (int j = 0; j < 59; j++)
                {
                    itMenge.MoveNext();
                    itPreis.MoveNext();
                    itID.MoveNext();
                    if (lstTeile[i].TeilNr == itID.Current.ValueAsInt)
                    {
                        lstTeile[i].Lagermenge = itMenge.Current.ValueAsInt;
                        lstTeile[i].Preis = Convert.ToDouble(itPreis.Current.Value);
                    }
                }              
            }

            return lstTeile;

        }

        public static string getPeriod()
        {
            initNeueDatei();
            XPathNavigator periodeAkt = naviPeriod.SelectSingleNode(xPathPeriod);

            return periodeAkt.Value;
        }

        public static List<Arbeitsplatz> getLstArbeitsplatzFromXML()
        {
            initNeueDatei();
            List<Arbeitsplatz> lstArbeitsplatz = new List<Arbeitsplatz>();
            XPathNodeIterator itArbeitsplID = naviArbeitsplID.Select(xPathSelectArbeitsplID);
            XPathNodeIterator itArbeitsplRuest = naviArbeitsplRuestAnzahl.Select(xPathSelectArbeitsplRuestAnzahl);
            XPathNodeIterator itArbeitsplLeerzeit = naviArbeitsplLeerzeit.Select(xPathSelectArbeitsplLeerzeit);
            XPathNodeIterator itArbeitsplLohnleer = naviArbeitsplLohneLeer.Select(xPathSelectArbeitsplLohneLeer);
            XPathNodeIterator itArbeitsplLohn = naviArbeitsplLohn.Select(xPathSelectArbeitsplLohn);
            XPathNodeIterator itArbeitsplMaschninenleer = naviArbeitsplIMaschinenleer.Select(xPathSelectArbeitsplMaschinenleer);

            while (itArbeitsplID.MoveNext())
            {
                itArbeitsplRuest.MoveNext();
                itArbeitsplLeerzeit.MoveNext();
                itArbeitsplLohnleer.MoveNext();
                itArbeitsplLohn.MoveNext();
                itArbeitsplMaschninenleer.MoveNext();

                Arbeitsplatz arbeitsplatz = new Arbeitsplatz();

                arbeitsplatz.ArbeitsplatzNr = itArbeitsplID.Current.ValueAsInt;
                arbeitsplatz.Ruestvorgaeng = itArbeitsplRuest.Current.ValueAsInt;
                arbeitsplatz.Leerzeit = itArbeitsplLeerzeit.Current.ValueAsInt;
                arbeitsplatz.Lohnleerkosten = Convert.ToDouble(itArbeitsplLohnleer.Current.Value);
                arbeitsplatz.Lohnkosten = Convert.ToDouble(itArbeitsplLohn.Current.Value);
                arbeitsplatz.Maschinenleerkosten = Convert.ToDouble( itArbeitsplMaschninenleer.Current.Value);
               
                
                Schicht schicht = new Schicht();
                arbeitsplatz.listSchicht.Add(schicht);

                lstArbeitsplatz.Add(arbeitsplatz);
            }

            return lstArbeitsplatz;
        }

        public static List<Warteliste> getLstWartelisteFromXML()
        {
            initNeueDatei();
            List<Warteliste> lstWarteliste = new List<Warteliste>();



            for(int i=1;i<=15;i++) {
                string xPathSelectProdauftragwartelisteID = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@order";
                XPathNodeIterator itProdauftragWartelisteID = naviProdauftragwartelisteID.Select(xPathSelectProdauftragwartelisteID);

                string xPathSelectProdauftragwartelisteZeitbedarf = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@timeneed";
                string xPathSelectProdauftragwarteListeProdauftrag = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@order";
                string xPathSelectProdauftragwartelisteLos = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@firstbatch";
                string xPathSelectProdauftragwartelisteTeil = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@item";
                string xPathSelectProdauftragwartelistemenge = "//waitinglistworkstations/workplace[@id='" + i + "']/waitinglist/@amount";

                XPathNodeIterator itProdauftragWartelisteZeitbedarf = naviProdauftragwartelisteZeitbedarf.Select(xPathSelectProdauftragwartelisteZeitbedarf);
                XPathNodeIterator itProdauftragWartelisteProdauftrag = naviProdauftragwarteListeProdauftrag.Select(xPathSelectProdauftragwarteListeProdauftrag);
                XPathNodeIterator itProdauftragWartelisteLos = naviProdauftragwartelisteLos.Select(xPathSelectProdauftragwartelisteLos);
                XPathNodeIterator itProdauftragWartelisteTeil = naviProdauftragwartelisteTeil.Select(xPathSelectProdauftragwartelisteTeil);
                XPathNodeIterator itProdauftragWartelisteMenge = naviProdauftragwartelistemenge.Select(xPathSelectProdauftragwartelistemenge);

                while(itProdauftragWartelisteID.MoveNext()){
                    itProdauftragWartelisteLos.MoveNext();
                    itProdauftragWartelisteMenge.MoveNext();
                    itProdauftragWartelisteProdauftrag.MoveNext();
                    itProdauftragWartelisteTeil.MoveNext();
                    itProdauftragWartelisteZeitbedarf.MoveNext();
                    itProdauftragWartelisteID.MoveNext();

                    Warteliste warteliste = new Warteliste();

                    warteliste.WartelisteLos = itProdauftragWartelisteLos.Current.Value;
                    warteliste.WartelisteMenge = itProdauftragWartelisteMenge.Current.ValueAsInt;
                    warteliste.WarteListeProdauftrag = itProdauftragWartelisteProdauftrag.Current.ValueAsInt;
                    warteliste.WartelisteTeil = itProdauftragWartelisteTeil.Current.ValueAsInt;
                    warteliste.WartelisteZeitbedarf = itProdauftragWartelisteZeitbedarf.Current.ValueAsInt;
                    warteliste.WartelisteArbeitsplatz =i;

                    lstWarteliste.Add(warteliste);
                }
            }
            return lstWarteliste;
        }

        public static List<Bearbeitung> getLstBearbeitunglisteFromXML()
        {
            initNeueDatei();
            List<Bearbeitung> lstBearbeitung = new List<Bearbeitung>();

            XPathNodeIterator itProdauftragBearbeitungArbeitsplatz = naviProdauftragBearbeitungArbeitsplatz.Select(xPathSelectProdauftragBearbeitungArbeitsplatz);
            XPathNodeIterator itProdauftragBearbeitungMenge = naviProdauftragBearbeitungMenge.Select(xPathSelectProdauftragBearbeitungMenge);
            XPathNodeIterator itProdauftragBearbeitungProdauftrag = naviProdauftragBearbeitungProdauftrag.Select(xPathSelectProdauftragBearbeitungProdauftrag);
            XPathNodeIterator itProdauftragBearbeitungTeil = naviProdauftragBearbeitungTeil.Select(xPathSelectProdauftragBearbeitungTeil);
            XPathNodeIterator itProdauftragBearbeitungZeitbedarf = naviProdauftragBearbeitungZeitbedarf.Select(xPathSelectProdauftragBearbeitungZeitbedarf);

            while (itProdauftragBearbeitungArbeitsplatz.MoveNext()) {
                itProdauftragBearbeitungMenge.MoveNext();
                itProdauftragBearbeitungProdauftrag.MoveNext();
                itProdauftragBearbeitungTeil.MoveNext();
                itProdauftragBearbeitungZeitbedarf.MoveNext();

                Bearbeitung bearbeitung = new Bearbeitung();

                bearbeitung.BearbeitungArbeitsplatz = itProdauftragBearbeitungArbeitsplatz.Current.ValueAsInt;
                bearbeitung.BearbeitungMenge = itProdauftragBearbeitungMenge.Current.ValueAsInt;
                bearbeitung.BearbeitungProdauftrag = itProdauftragBearbeitungProdauftrag.Current.ValueAsInt;
                bearbeitung.BearbeitungTeil = itProdauftragBearbeitungTeil.Current.ValueAsInt;
                bearbeitung.BearbeitungZeitbedarf = itProdauftragBearbeitungZeitbedarf.Current.ValueAsInt;

                lstBearbeitung.Add(bearbeitung);

            }
            return lstBearbeitung;
        }

        public static List<Bestellung> getLstBestellungAktuellerLagerzugang()
        {
            initNeueDatei();
            List<Bestellposition> lstBps = new List<Bestellposition>();
            List<Bestellung> lstBestellung = new List<Bestellung>();
            List<Bestellung> lstLagerzugang = new List<Bestellung>();

            XPathNodeIterator itAktuellerLagerzugangBestellPeriode= naviLagerzugangAktuellBestellPeriode.Select(xPathSelectLagerzugangAktuellBestellPeriode);
            XPathNodeIterator itAktuellerLagerzugangBestellNr = naviLagerzugangAktuellBestellNr.Select(xPathSelectLagerzugangAktuellBestellNr);
            XPathNodeIterator itAktuellerLagerzugangBestellModus = naviLagerzugangAktuellBestellBestellModus.Select(xPathSelectLagerzugangAktuellBestellModus);
            XPathNodeIterator itAktuellerLagerzugangArtikelNr = naviLagerzugangAktuellBestellArtikelNr.Select(xPathSelectLagerzugangAktuellBestellArtikelNr);
            XPathNodeIterator itAktuellerLagerzugangMenge = naviLagerzugangAktuellBestellMenge.Select(xPathSelectLagerzugangAktuellBestellMenge);
            XPathNodeIterator itAktuellerLagerzugangLieferzeitpunkt = naviLagerzugangAktuellBestellLieferzeitpunkt.Select(xPathSelectLagerzugangAktuellBestellLieferzeitpunkt);
            XPathNodeIterator itAktuellerLagerzugangMaterialkosten = naviLagerzugangAktuellBestellMaterialkosten.Select(xPathSelectLagerzugangAktuellBestellMaterialkosten);
            XPathNodeIterator itAktuellerLagerzugangGesamtkosten = naviLagerzugangAktuellBestellGesamtkosten.Select(xPathSelectLagerzugangAktuellBestellGesamtkosten);
            XPathNodeIterator itAktuellerLagerzugangBestellkosten = naviLagerzugangAktuellBestellBestellkosten.Select(xPathSelectLagerzugangAktuellBestellBestellkosten);
            XPathNodeIterator itAktuellerLagerzugangStueckkosten = naviLagerzugangAktuellBestellStueckkosten.Select(xPathSelectLagerzugangAktuellBestellStueckkosten);
            //
            while(itAktuellerLagerzugangBestellNr.MoveNext()){
                itAktuellerLagerzugangBestellPeriode.MoveNext();
                itAktuellerLagerzugangBestellModus.MoveNext();
                itAktuellerLagerzugangArtikelNr .MoveNext();
                itAktuellerLagerzugangMenge.MoveNext() ;
                itAktuellerLagerzugangLieferzeitpunkt.MoveNext() ;
                itAktuellerLagerzugangMaterialkosten.MoveNext();
                itAktuellerLagerzugangGesamtkosten.MoveNext();
                itAktuellerLagerzugangBestellkosten.MoveNext() ;
                itAktuellerLagerzugangStueckkosten.MoveNext();

                Teil t  = new Teil();
                t.TeilNr = itAktuellerLagerzugangArtikelNr.Current.ValueAsInt;
                Bestellposition bp = new Bestellposition(t, itAktuellerLagerzugangMenge.Current.ValueAsInt, itAktuellerLagerzugangBestellModus.Current.ValueAsInt,
                    itAktuellerLagerzugangBestellPeriode.Current.ValueAsInt,
                    itAktuellerLagerzugangBestellNr.Current.ValueAsInt,Convert.ToDouble(itAktuellerLagerzugangGesamtkosten.Current.Value));
                lstBps.Add(bp);
            }

             itAktuellerLagerzugangBestellPeriode = naviLagerzugangAktuellBestellPeriode.Select(xPathSelectLagerzugangAktuellBestellPeriode);
             itAktuellerLagerzugangBestellNr = naviLagerzugangAktuellBestellNr.Select(xPathSelectLagerzugangAktuellBestellNr);
             itAktuellerLagerzugangBestellModus = naviLagerzugangAktuellBestellBestellModus.Select(xPathSelectLagerzugangAktuellBestellModus);
             itAktuellerLagerzugangArtikelNr = naviLagerzugangAktuellBestellArtikelNr.Select(xPathSelectLagerzugangAktuellBestellArtikelNr);
             itAktuellerLagerzugangMenge = naviLagerzugangAktuellBestellMenge.Select(xPathSelectLagerzugangAktuellBestellMenge);
             itAktuellerLagerzugangLieferzeitpunkt = naviLagerzugangAktuellBestellLieferzeitpunkt.Select(xPathSelectLagerzugangAktuellBestellLieferzeitpunkt);
             itAktuellerLagerzugangMaterialkosten = naviLagerzugangAktuellBestellMaterialkosten.Select(xPathSelectLagerzugangAktuellBestellMaterialkosten);
             itAktuellerLagerzugangGesamtkosten = naviLagerzugangAktuellBestellGesamtkosten.Select(xPathSelectLagerzugangAktuellBestellGesamtkosten);
             itAktuellerLagerzugangBestellkosten = naviLagerzugangAktuellBestellBestellkosten.Select(xPathSelectLagerzugangAktuellBestellBestellkosten);
             itAktuellerLagerzugangStueckkosten = naviLagerzugangAktuellBestellStueckkosten.Select(xPathSelectLagerzugangAktuellBestellStueckkosten);

            while (itAktuellerLagerzugangBestellNr.MoveNext())
            {
                itAktuellerLagerzugangBestellPeriode.MoveNext();
                itAktuellerLagerzugangBestellModus.MoveNext();
                itAktuellerLagerzugangArtikelNr.MoveNext();
                itAktuellerLagerzugangMenge.MoveNext();
                itAktuellerLagerzugangLieferzeitpunkt.MoveNext();
                itAktuellerLagerzugangMaterialkosten.MoveNext();
                itAktuellerLagerzugangGesamtkosten.MoveNext();
                itAktuellerLagerzugangBestellkosten.MoveNext();
                itAktuellerLagerzugangStueckkosten.MoveNext();

                Bestellung best = new Bestellung(itAktuellerLagerzugangBestellNr.Current.ValueAsInt, null, 
                   0);
                lstBestellung.Add(best);
            }

            lstLagerzugang = GUI_LOAD.getDistinctBestellung(lstBestellung);

            foreach (Bestellung b in lstLagerzugang) {
                b.Bestellpositionen = GUI_LOAD.getBestellPosZuBestellungID(lstBps, b.BestellNr);
            }

            return lstLagerzugang;
            //Bestellung best = new Bestellung(itAktuellerLagerzugangBestellNr.Current.ValueAsInt, lstBps, itAktuellerLagerzugangBestellPeriode.Current.ValueAsInt,
            //itAktuellerLagerzugangGesamtkosten.Current.ValueAsDouble);
        }

        public static List<Bestellung> getLstBestellungZukuenftigerLagerzugang() {
            initNeueDatei();
            List<Bestellposition> lstbps = new List<Bestellposition>();
            List<Bestellung> lstBestellung = new List<Bestellung>();
            List<Bestellung> lstLagerzugang = new List<Bestellung>();

            XPathNodeIterator itZukunftLagerzugangPeriode = naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftPeriode);
            XPathNodeIterator itZukunftLagerzugangBestellNr= naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftBestellNr);
            XPathNodeIterator itZukunftLagerzugangBestellmodus= naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftBestellmodus);
            XPathNodeIterator itZukunftLagerzugangTeilNr = naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftTeilNr);
            XPathNodeIterator itZukunftLagerzugangMenge = naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftMenge);

            while (itZukunftLagerzugangBestellNr.MoveNext()) {

                itZukunftLagerzugangPeriode.MoveNext();
                itZukunftLagerzugangBestellmodus.MoveNext();
                itZukunftLagerzugangTeilNr.MoveNext();
                itZukunftLagerzugangMenge.MoveNext();

                Teil t = new Teil();
                t.TeilNr = itZukunftLagerzugangTeilNr.Current.ValueAsInt;

                Bestellposition bp = new Bestellposition(t, itZukunftLagerzugangMenge.Current.ValueAsInt,
                    itZukunftLagerzugangBestellmodus.Current.ValueAsInt,itZukunftLagerzugangPeriode.Current.ValueAsInt,itZukunftLagerzugangBestellNr.Current.ValueAsInt,0);
                lstbps.Add(bp);
            
            }


            itZukunftLagerzugangBestellNr = naviLagerzugangZukunftPeriode.Select(xPathSelectLagerzugangZukunftBestellNr);

            while (itZukunftLagerzugangBestellNr.MoveNext()) {
                Bestellung b = new Bestellung(itZukunftLagerzugangBestellNr.Current.ValueAsInt, null,0);
                lstBestellung.Add(b);
            }

            lstLagerzugang = GUI_LOAD.getDistinctBestellung(lstBestellung);

            foreach (Bestellung b in lstLagerzugang)
            {
                b.Bestellpositionen = GUI_LOAD.getBestellPosZuBestellungID(lstbps, b.BestellNr);
            }

            return lstLagerzugang;
        }

        public static Dashboard getDashboardWerte() {
            initNeueDatei();
            Dashboard db = new Dashboard();

            XPathNodeIterator itProduktivitaet= naviProduktivitaet.Select(xPathSelectProduktivitaet);
            XPathNodeIterator itAuslastung = naviUmsatzrend.Select(xPathSelectUmsatzrend);
            XPathNodeIterator itLiefertreue = naviLiefertreue.Select(xPathSelectLiefertreue);
            XPathNodeIterator itAbsatzAkt = naviAbsatzAktuell.Select(xPathSelectAbsatzAktuell);
            XPathNodeIterator itAbsatzAlle =naviAbsatzAlle.Select(xPathSelectAbsatzAlle);

            while (itProduktivitaet.MoveNext()) {
                itLiefertreue.MoveNext();
                itAbsatzAlle.MoveNext();
                itAbsatzAkt.MoveNext();
                itAuslastung.MoveNext();

                db.produktivitaet = Convert.ToDouble(itProduktivitaet.Current.Value.Replace("%", ""));
                db.liefertreue = Convert.ToDouble(itLiefertreue.Current.Value.Replace("%", ""));
                db.absatzAktPeriode = itAbsatzAkt.Current.ValueAsInt;
                db.absatzAllePerioden = itAbsatzAlle.Current.ValueAsInt;
                db.umsatzrendite = (Convert.ToDouble(itAuslastung.Current.Value)/ (itAbsatzAkt.Current.ValueAsInt * 200)) * 100*-1;
            }
            return db;
        }

    }
}
